package mysql8学习.高级.第15章_锁;

/**
 * 2.写操作
 * 平常所用到的写操作无非是 DELETE、UPDATE、INSERT 这三种:
 * ● DELETE:
 *  对一条记录做DELETE操作的过程其实是先在 B+ 树中定位到这条记录的位置，
 *  然后获取这条记录的X锁（排他锁），再执行 delete mark 操作。
 *  我们也可以把这个定位待删除记录在 B+ 树中位置的过程看成是一个获取 X 锁的锁定读。
 * ● UPDATE: 在对一条记录做UPDATE操作时分为三种情况:
 *  。情况1:未修改该记录的键值，并且被更新的列占用的存储空间在修改前后未发生变化。
 *      则先在B+树中定位到这条记录的位置，然后再获取一下记录的X锁，最后在原记录的位置进行修改操作。
 *      我们也可以把这个定位待修改记录在B+树中位置的过程看成是一个获取X锁的锁定读。
 *  。情况2:未修改该记录的键值，并且至少有一个被更新的列占用的存储空间在修改前后发生变化。
 *      则先在B+树中定位到这条记录的位置，然后获取一下记录的 X 锁,
 *      将该记录彻底删除掉(就是把记录彻底移入垃圾链表)，最后再插入一条新记录。
 *      这个定位待修改记录在B+树中位置的过程看成是一个获取 X 锁的锁定读，
 *      新插入的记录由INSERT操作提供的 隐式锁 进行保护。
 *  。情况3:修改了该记录的键值，则相当于在原记录上做DELETE操作之后再来一次INSERT操作,
 *      加锁操作就需要按照DELETE和INSERT的规则进行了。
 * ● INSERT:  隐式锁
 *   一般情况下，新插入一条记录的操作并不加锁，通过一种称之为隐式锁的结构
 *   来保护这条新插入的记录在本事务提交前不被别的事务访问。
 *
 *
 */
public class C_A2_写操作 {
}

